package com.sunwayhorizo.health.platform.security.service.identity;

import java.util.List;

import javax.ejb.Local;

import com.sunwayhorizo.health.business.dto.ResultsDTO;
import com.sunwayhorizo.health.platform.common.SecurityQueryConditions;
import com.sunwayhorizo.health.platform.security.persistent.SecurityAccount;

@Local
public interface SecurityAccountManagerLocal {
	
	/**
	 * 新增账号级联包含permissionAccounts,accRolePermissions,accountRoles,dataObjectAccounts
	 * @param account 实体
	 * @return 返回ResultsDTO,若成功返回提示信息，标志为True，以及实体生成的ID，若失败返回提示信息，标志为False
	 */
	ResultsDTO newSecurityAccount(SecurityAccount account);
	
	/**
	 * 批量删除账号级联包含permissionAccounts,accRolePermissions,accountRoles,dataObjectAccounts
	 * @param list 字符串List 
	 * @return 返回ResultsDTO,若成功返回提示信息，标志为True，若失败返回提示信息，标志为False
	 */
	ResultsDTO delSecurityAccount(List<String> list);
	
	/**
	 * 修改账号级联包含permissionAccounts,accRolePermissions,accountRoles,不包含dataObjectAccounts
	 * @param list 字符串List 
	 * @return 返回ResultsDTO,若成功返回提示信息，标志为True，若失败返回提示信息，标志为False
	 */
	ResultsDTO updateSecurityAccount(SecurityAccount account);
	
	/**
	 * 修改密码
	 * @param account 实体
	 * @return 返回ResultsDTO,若成功返回提示信息，标志为True，若失败返回提示信息，标志为False
	 */
	ResultsDTO updateSecurityAccountPassword(SecurityAccount account);
	
	/**
	 * 查询账号列表
	 * @return 返回ResultsDTO,若成功返回提示信息，标志为True，以及查询的账号列表，若失败返回提示信息，标志为False
	 */
	ResultsDTO findSecurityAccountList();
	
	/**
	 * 查询账号详细信息
	 * @param accountId 实体Id
	 * @return 返回ResultsDTO,若成功返回提示信息，标志为True，以及查询的账号信息，若失败返回提示信息，标志为False
	 */
	ResultsDTO findSecurityAccountDetailById(String accountId);
	
	/**
	 * 根据角色Id查询账号列表
	 * @param roleId 实体Id
	 * @return 返回ResultsDTO,若成功返回提示信息，标志为True，以及查询的账号列表，若失败返回提示信息，标志为False
	 */
	ResultsDTO findSecurityAccountListByRoleId(String roleId);
	
	/**
     * 根据角色Id查询没有角色的账号列表
     * @param roleId 实体Id
     * @return 返回ResultsDTO,若成功返回提示信息，标志为True，以及查询的账号列表，若失败返回提示信息，标志为False
     */
	ResultsDTO findSecurityAccountListNotHasRole(String roleId);
	/**
	 * 根据页面条件查询账号列表
	 * @param account 封装了页面的所有条件
	 * @return 返回ResultsDTO,若成功返回提示信息，标志为True，以及查询的账号列表，若失败返回提示信息，标志为False
	 */
	ResultsDTO findSecurityAccountListByAccount(SecurityAccount account);
	
	/**
	 * 根据页面条件查询账号列表(带分页)
	 * @param currentPage 当前页面的页码
	 * @param pageSize	一页显示的数量
	 * @param account	封装了页面的所有条件
	 * @return 返回ResultsDTO,若成功返回提示信息，标志为True，以及查询的账号列表，若失败返回提示信息，标志为False
	 */
	ResultsDTO findSecurityAccountListByAccount(int currentPage,int pageSize,SecurityAccount account);
	
	/**
     * 根据页面条件查询账号列表
     * @param account 封装了页面的所有条件
     * @return 返回ResultsDTO,若成功返回提示信息，标志为True，以及查询的账号列表，若失败返回提示信息，标志为False
     */
    ResultsDTO findSecurityAccountListByQueryConditions(SecurityQueryConditions conditions);
    
    /**
     * 根据页面条件查询账号列表(带分页)
     * @param currentPage 当前页面的页码
     * @param pageSize  一页显示的数量
     * @param account   封装了页面的所有条件
     * @return 返回ResultsDTO,若成功返回提示信息，标志为True，以及查询的账号列表，若失败返回提示信息，标志为False
     */
    ResultsDTO findSecurityAccountListByQueryConditions(int currentPage,int pageSize,SecurityQueryConditions conditions);
	
	/**
	 * 对账号名称进行唯一性约束
	 * @param accountId		实体ID
	 * @param accountName	实体名称
	 * @return				返回ResultsDTO,若唯一返回提示信息，标志为True，若重复时返回提示信息，标志为False
	 */
	ResultsDTO validateUniqueSecurityAccount(String accountId,String accountName);
	
	/**
	 * 批量启用停用账号列表
	 * @param list 字符串List
	 * @param flag 修改账号启用、停止的状态
	 * @return	返回ResultsDTO,若成功返回提示信息，标志为True，若失败返回提示信息，标志为False
	 */
	ResultsDTO enableOrUnableSecurityAccount(List<String> list,String flag);
	
	/**
	 * 验证账号的有效性，返回查询到的账号
	 * @param account 封装了页面信息到账号中
	 * @return 返回ResultsDTO,若成功返回提示信息，标志为True，若失败返回提示信息，标志为False
	 */
	ResultsDTO validateAccountLawful(SecurityAccount account);
	
	/**
     * 验证账号的有效性，返回查询到的账号
     * @param account 封装了页面信息到账号中
     * @return 返回ResultsDTO,若成功返回提示信息，标志为True，若失败返回提示信息，标志为False
     */
	ResultsDTO findLoginSecurityAccountByAccountNameAndPWD(SecurityAccount account);
}
